package com.hubu.blog.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;

import java.io.Serial;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 用户-角色关联表(支持时效性角色和分配审核) 实体类。
 *
 * @author 331126135@qq.com
 * @since 2025-06-10
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "用户-角色关联表(支持时效性角色和分配审核)")
@Table(value = "blog_user_role", schema = "db_blog")
public class UserRole implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 关联ID，雪花算法生成
     */
    @Id
    @Schema(description = "关联ID，雪花算法生成")
    private Long id;

    /**
     * 用户ID
     */
    @Schema(description = "用户ID")
    private Long userId;

    /**
     * 角色ID
     */
    @Schema(description = "角色ID")
    private Long roleId;

    /**
     * 状态: active-生效, disabled-禁用, pending-待审核
     */
    @Schema(description = "状态: active-生效, disabled-禁用, pending-待审核")
    private String status;

    /**
     * 角色过期时间(NULL表示永久有效)
     */
    @Schema(description = "角色过期时间(NULL表示永久有效)")
    private LocalDateTime expireTime;

    /**
     * 分配原因(系统自动/管理员分配/注册默认等)
     */
    @Schema(description = "分配原因(系统自动/管理员分配/注册默认等)")
    private String assignReason;

    /**
     * 分配人用户ID(NULL表示系统自动分配)
     */
    @Schema(description = "分配人用户ID(NULL表示系统自动分配)")
    private Long assignBy;

    /**
     * 是否删除
     */
    @Column(isLogicDelete = true)
    @Schema(description = "是否删除")
    private Boolean isDeleted;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private LocalDateTime updateTime;

    /**
     * 删除时间
     */
    @Schema(description = "删除时间")
    private LocalDateTime deleteTime;

}
